首页 > 试题广场 >

名字的漂亮度

[编程题]名字的漂亮度
  • 热度指数:142718 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。

给出多个字符串,计算每个字符串最大可能的“漂亮度”。

本题含有多组数据。

数据范围:输入的名字长度满足



输入描述:

第一行一个整数N,接下来N行每行一个字符串



输出描述:

每个字符串可能的最大漂亮程度

示例1

输入

2
zhangsan
lisi

输出

192
101

说明

对于样例lisi,让i的漂亮度为26,l的漂亮度为25,s的漂亮度为24,lisi的漂亮度为25+26+24+26=101.   
# 定义漂亮度函数
def nicenamescore(name):
    name_set = set(name.lower())  # 名字全部小写字母集合
    # name_elem_len = len(name_set)  # 获取名字字母集合的大小

    # 生成名字字母个数的列表
    name_elem_cnt = []
    for elem in name_set:
        name_elem_cnt.append(name.lower().count(elem))

    # 生成降序排列的名字字母个数列表
    elem_cnt_desc = sorted(name_elem_cnt, reverse=True)  # 根据出现的次数按照从大到小排列

    # 计算名字漂亮度
    score = 0  # 初始化漂亮度为0
    for i in range(len(elem_cnt_desc)):
        score += (26 -i) * elem_cnt_desc[i]
    return score



# 循环处理逻辑
while True:
    try:
        # 数据输入
        n = int(input().strip())  # 输入名字的个数
        # 外部输入每一行的名字同时打印一个漂亮度
        for k in range(n):
            name = input().strip()  # 输入名字
            print(nicenamescore(name))  # 输出名字漂亮度
    except:
        break

发表于 2023-03-21 15:44:46 回复(0)
将出现的字母按从多到少排序,26减去在列表中的下标就是字母的漂亮度,最后遍历名字累计漂亮度即可
n = int(input())
for i in range(n):
    s = input()
    typ = list(set(s))
    typ.sort(key = lambda x:s.count(x),reverse=True)
    score = 0
    for i in s:
        score += 26-typ.index(i)
    print(score)

发表于 2022-10-14 11:15:18 回复(0)
n = int(input())
ls = []
for _ in range(n):
    ls.append(input())
def maxbeautiful(s):
    char = sorted(list(s)) #将字符串排序,这样相同字母的就在一起
    i = 1
    a = 1
    res = []
    #计算每个字母出现的次数,加到列表里
    while i < len(char):
        if char[i] == char[i-1]:
            a += 1
            i += 1
        else:
            res.append(a)
            a = 1
            i += 1
    res.append(a)
    #将出现次数列表降序排列
    res.sort(reverse=True)
    ans = 0
    #然后最大的数乘26,依次递减,算出总和
    for i in range(len(res)):
        ans += res[i]*(26 - i)
    return ans
for item in ls:
    print(maxbeautiful(item))

发表于 2022-09-16 00:57:28 回复(0)
res = []
n = int(input())
while True:
    try:
        res.append(input())
    except:
        for s in res:
            tem = []
            res = 0
            for alpha in list(set(s)):
                tem.append(s.count(alpha))
            tem = sorted(tem, reverse=True)
            for i in range(len(tem)):
                res += tem[i] * (26 - i)
            print(res)
        break

发表于 2022-09-14 04:17:17 回复(0)
num = int(input())
for _ in range(num):
    s = input().lower()
    dct = {}
    n = 0
    n1 = 26
    for ch in s:
        if ch in dct:
            dct[ch] += 1
        else:
            dct[ch] = 1
    li = list(dct.values())
    li.sort(reverse = True)
    for i in li:
        n += i*n1
        n1 -= 1
    print(n)

发表于 2022-09-07 23:01:28 回复(0)
def number(x):#统计各个字符的个数
    y={}
    c=[]
    for i in x:
        if i not in c:
            c.append(i)
            y[i]=1
        else:
            y[i]=y[i]+1
    d=sorted(y.items(), key=lambda x:x[1],reverse=True)#从大到小排序
    d=dict(d)
    return d #字符串按出现顺序的字符的个数
    
def piaoliangdu(x):#对d里的每个数字进行赋值,次数出现最多的赋值最大
    y=number(x)
    #sum=[]#存入所有可能的漂亮度总和
    n={}#存入每个字符的漂亮度
    m=0
    for i in y.keys():
        for j in range(1,27):
            if 27-int(j) not in n.values() and i not in n.keys():
                n[i]=27-int(j)
                m=m+int(n[i])*int(y[i])
    
    return m 

while 1:
    try:
        n=int(input())
        for i in range(n):
            x=input()
            a=piaoliangdu(x)
            print(a)
    except:break
            
            
            
            
            
            
            
            

发表于 2022-09-06 22:09:45 回复(0)
from collections import Counter

n = int(input())
li = []
for i in range(n):
    li.append(input())
# print(li)
for j in li:
    l = sorted(Counter(j).items(), key=lambda x: x[1], reverse=True)
#     print(l)
    pld = 26
    sum_pld = 0
    for (k, v) in l:
        sum_pld += v*pld
        pld -= 1
    print(sum_pld)
发表于 2022-08-25 16:53:27 回复(0)
def pls(s): # 定义计算漂亮度的函数
    counts = [] # 保存每个字母出现的次数
    scores = 0 # 漂亮度的总分
    for i in set(s):
        counts.append(s.count(i)) # 计算每个字母出现的次数
    counts.sort(reverse=True) # 将字母出现的次数倒序排列
    for i in range(len(counts)):
        scores += counts[i] * (26-i) # 按照字母出现的次数由高到低计算其分数并且加到总分,如出现次数最多的就乘以26,第二多的乘以25,以此类推,算出来的漂亮度就是最高的
    return scores # 返回总漂亮度

while True:
    try:
        n = int(input())
        ls = []
        for i in range(n):
            d = input().lower()
            ls.append(d) # 保存我们输入的字符串
        for i in ls:
            print(pls(i)) # 每个字符串都调一遍漂亮度函数,得到对应的漂亮度
    except:
        break
发表于 2022-08-21 17:21:00 回复(0)
while True:
    try:        
        def fun(str):
            str1=set(str)
            n=[]
            for i in str1:
                n.append(str.count(i))
            n.sort()
            n=n[::-1]
            m=[i for i in range(1,27)]
            m=m[::-1]
            m=m[:len(n)]
            y=0
            for i in range(len(n)):
                u=n[i]*m[i]
                y+=u
            return y
        # b=list(map(lambda x,y:x*y,n,m))
        # print(sum(b))
        str=int(input())
        h=[]
        for i in range(str):
            g=input()
            h.append(g)
        for i in h:
            print(fun(i))
    except:
        break
发表于 2022-08-18 21:35:33 回复(0)
str1=int(input())
i=0
a=[]
while i<str1:
    a.append(input())
    i=i+1

b=len(a)
c=dict()
d=[]
for i in range(b):
    e=dict()
    for j in a[i]:
        e[j]=a[i].count(j)
    d.append(e)  
#print(d)
f=[[k for k in d[i].values()]for i in range(len(d))]
for i in f:
    i.sort(reverse=True)
#print(f)
for i in range(len(f)):
    z=26
    sum=0
    for j in f[i]:
        unit=j*z
        z=z-1
        sum=sum+unit
    print(sum)   











发表于 2022-08-17 14:23:56 回复(0)
n = int(input())
def tanxin(s):
    d={}
    for i in s:
        if i not in d:
            d[i]=1
        else:
            d[i]+=1
    k=d.items()
    k=sorted(k,key= lambda x : x[1],reverse=True)
    f=26
    s=0
    for i in k:
        s=s+i[1]*f
        f=f-1
    print(s)
for i in range(n):
    n = input()
    tanxin(n)
发表于 2022-08-10 18:37:35 回复(0)
ip = int(input())
dic = {}

def getMaxPerfetScore(name):
    tmpDic = {}
    for char in name:
        if char in tmpDic.keys():
            tmpDic[char] += 1
        else:
            tmpDic[char] = 1
    sortedList = sorted(tmpDic.values(), reverse = True)
    score = 0    
    maxPoint = 26
    for item in sortedList:
        score += item*maxPoint
        maxPoint -= 1
    return score


for i in range(ip):
    name = input()
    dic[name] = getMaxPerfetScore(name)
    
for key,value in dic.items():
    print(value)
    
    

发表于 2022-08-05 14:22:50 回复(0)
from collections import Counter
while True:
    try:
        beauty = 0
        num = int(input())
        for i in range(num):
            strs = input().strip()
            strs_len = len(strs)
            dic = Counter(strs).most_common(strs_len)
            for j in range(len(dic)):
                beauty += (26-j)*dic[j][1]
            print(beauty)
            beauty = 0
    except:
        break

发表于 2022-07-29 19:31:36 回复(0)
python3 from collections import Counter; sorted(x, reverse=True)
from collections import Counter
while True:
    try:
        counts = int(input())
        strings = []
        for i in range(counts):
            temp = input().lower()
            temp = Counter(temp)
            temp = temp.values()
            temp = sorted(temp, reverse=True)
            length_temp = len(temp)
            output = 0
            for i in range(length_temp):
                output += temp[i]*(26-i)
            print(output)
    except:
        break


发表于 2022-07-17 16:19:46 回复(0)
while True:
    try:
        num=int(input)
        for i in range(num):
            str=input()
            str1=set(str)
            lst1=[]
            num1=0
            for j in str1:
                lst1.append(str.count(j))
            lst2=sorted(lst1,reverse=True)
            for l in range(len(lst2)):
                num1+=(26-l)*int(lst2[l])
            print(num1)    
    except:
        break
发表于 2022-07-10 22:58:58 回复(0)

问题信息

难度:
65条回答 37497浏览

热门推荐

通过挑战的用户

查看代码